package com.sunyard.dal.mapper;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.sunyard.dal.aop.DataSourceTag;
import com.sunyard.dal.bo.StaffQueryBO;
import com.sunyard.dal.dto.MerchantDayDataDTO;
import com.sunyard.dal.dto.StaffAmountDTO;
import com.sunyard.dal.dto.StaffDTO;
import com.sunyard.dal.entity.Shop;
import com.sunyard.dal.entity.Staff;
import com.sunyard.dal.entity.StaffKey;
import com.sunyard.dal.entity.manage.ShopNj;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

public interface StaffMapper {
    int deleteByPrimaryKey(StaffKey key);

    int insert(Staff record);

    int insertSelective(Staff record);

    int insertQy(Staff record);

    Staff selectByPrimaryKey(StaffKey key);

    Staff selectInfoByPrimaryKey(StaffKey key);

    int updateByPrimaryKeySelective(Staff record);

    int updateByPrimaryKey(Staff record);

    int updateShopLoginName(@Param("mchntCd") String mchntCd, @Param("shopId") String shopId,
                            @Param("loginName") String loginName);

    /**
     * 设置店员id
     */
    String selectStaffId(String mchntCd);

    /**
     * @param loginName
     * @param loginPwd
     * @return
     * @des 通过loginName + 密码查找用户
     * @author yic.huang
     */
    Staff selectByNameAndPwd(@Param("loginName") String loginName, @Param("loginPwd") String loginPwd);

    /**
     * @param mchntCd
     * @param loginPwd
     * @return
     * @des 通过商户号 + 密码查找商户用户
     * @author yic.huang
     */
    Staff selectByMchntAndPwd(@Param("mchntCd") String mchntCd, @Param("loginPwd") String loginPwd);

    /**
     * @param mchntCd
     * @return
     * @des 通过商户号查找商户用户
     * @author yic.huang
     */
    Staff selectByMchntCd(String mchntCd);

    /**
     * @param name
     * @return
     * @des 通过loginName或手机号查找用户
     * @author yic.huang
     */
    Staff selectByName(String name);

    /**
     * @param loginName
     * @return
     * @des 通过loginName查找用户
     * @author yic.huang
     */
    Staff selectByLoginName(String loginName);

    /**
     * @Description:通过loginName和手机号查找用户
     * @author yic.huang
     * @date 2020年7月9日
     */
    Staff selectByNameAndMobile(@Param("name") String name, @Param("mobileNo") String mobileNo);

    /**
     * @Description:通过staffId查找用户
     * @author yic.huang
     * @date 2020年7月9日
     */
    Staff selectByStaffIdAndMchntCd(@Param("mchntCd") String mchntCd, @Param("staffId") String staffId);

    /**
     * @Description:通过登录名查找店员数量
     * @author yic.huang
     * @date 2020年7月16日
     */
    int countByLoginName(String loginName);

    /**
     * @Description:通过手机号查找店员数量
     * @author yic.huang
     * @date 2020年7月16日
     */
    int countByMobileNo(String mobileNo);

    /**
     * @Description:根据门店主键查店员信息
     * @author yic.huang
     */
    List<Staff> queryStaffByShopId(Shop shop);

    /**
     * @Description:分页查询店员信息
     * @author yic.huang
     * @date 2020年7月15日
     */
    List<StaffDTO> queryByBO(StaffQueryBO queryBo);

    /**
     * @Description:获取当前最大店员id+1作为新增的店员id
     * @author yic.huang
     * @date 2020年7月16日
     */
    String selectMaxStaffId();

    void updateAllShop(Shop shop);

    void updateAllShopNj(ShopNj shop);

    void updateAllMchnt(@Param("mchntCd") String mchntCd);

    void updateAllOwnerAgent(@Param("ownerAgentCd") String ownerAgentCd);

    List<Staff> selectByOpenId(@Param("openId") String openId);

    int bindopenId(@Param("staffId") String staffId, @Param("mchntCd") String mchntCd, @Param("openId") String openId);

    int unbindWeChat(@Param("openId") String openId);

    /**
     * 重置
     */
//    void resetMerchant(String mchntCd);

    BigDecimal queryStaffCountByMerchantId(String merchantId);

    Staff selectByStaffId(String staffId);

    /**
     * 商服首页门店信息
     */
    MerchantDayDataDTO selectByLogin(String LoginName);

    /**
     * 根据登录名查询实时交易金额
     */
    @DataSourceTag
    BigDecimal selectTransByLogin(Map<String, String> map);

    /**
     * 根据登录名查询实时交易金额
     */
    @DataSourceTag
    BigDecimal selectTransByLoginShopId(Map<String, String> map);

    /**
     * 根据登录名查询实时退款金额
     */
    @DataSourceTag
    BigDecimal selectRepealByLogin(Map<String, String> map);

    /**
     * 根据登录名查询实时退款金额
     */
    @DataSourceTag
    BigDecimal selectRepealByLoginByShopId(Map<String, String> map);

    @DataSourceTag
    List<StaffAmountDTO> selectStaffAmount(Map<String, String> map);

    @DataSourceTag
    List<StaffAmountDTO> selectStaffNumber(Map<String, String> map);

    /**
     * 更新loginName同步状态
     *
     * @param loginName 登录名
     * @param hujinSyn  互金同步状态
     */
    void updateLoginNameSyn(@Param("loginName") String loginName, @Param("hujinSyn") String hujinSyn);

    //查询店员Id
    String selectStaffIdByLoginName(String staffId);

    @DS("zhsdw1")
    List<Staff> queryHjStatus();

    Staff selectByStaffIdAndShopId(@Param("staffId") String staffId, @Param("shopId") String shopId);

    void updateHJ(@Param("mchntCd") String mchntCd, @Param("staffId") String staffId);

    /**
     * 通过loginName 更新店员状态
     *
     * @param loginName   登录名
     * @param staffStatus 状态
     */
    void updateStaffStatus(@Param("loginName") String loginName, @Param("staffStatus") String staffStatus);

    /**
     * 通过loginName 更新店员手机号
     *
     * @param loginName 登录名
     * @param mobileNo  手机号
     */
    void updateStaffMobileNo(@Param("loginName") String loginName, @Param("mobileNo") String mobileNo);

    /**
     * 通过门店Id查询门店长
     *
     * @param shopId 门店Id
     */
    Staff selectByShopId(@Param("shopId") String shopId);

    /**
     * 变更互金同步状态--店员
     *
     * @param loginName 登录名
     * @param hujinSyn  互金同步状态
     */
    void updateHujinSync(@Param("loginName") String loginName, @Param("hujinSyn") String hujinSyn);

    /**
     * 变更互金同步状态--商户
     *
     * @param mchntCd  商户号
     * @param hujinSyn 互金同步状态
     */
    void updateHujinSyncMchnt(@Param("mchntCd") String mchntCd, @Param("hujinSyn") String hujinSyn);

    /**
     * 变更互金同步状态--门店
     *
     * @param shopId   门店号
     * @param hujinSyn 互金同步状态
     */
    void updateHujinSyncShop(@Param("shopId") String shopId, @Param("hujinSyn") String hujinSyn);

    /**
     * 通过商户号查询商户长
     *
     * @param mchntCd 商户号
     */
    Staff selectMchntByMchntCd(String mchntCd);

    /**
     * 更新staff中互金虚拟终端
     *
     * @param mchntCd  商户号
     * @param deviceId 终端号
     */
    void updateHuJinDeviceId(@Param("mchntCd") String mchntCd, @Param("deviceId") String deviceId);

    int insertHujin(Staff record);

    void updateHuJinDeviceId(@Param("mchntCd") String mchntCd, @Param("deviceId") String deviceId, @Param("channelType") String channelType);

    /**
     * 查询虚拟终端
     *
     * @param mchntCd
     * @param channelType
     * @return
     */
    String selectDeviceId(@Param("mchntCd") String mchntCd, @Param("channelType") String channelType);

    void updateBak2(@Param("mchntCd") String mchntCd, @Param("bak2") String bak2);
}
